package 热题100;

//将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
public class 热题21合并连个有序链表 {


    /**
     * 使用一个新链表，来保存合并后的链接的节点
     * @param list1
     * @param list2
     * @return
     */
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummyHead = new ListNode();//虚拟头节点
        ListNode cur = dummyHead;//辅助节点
        //如果连个链表中有一个不为空，比较然后拼接
        while (list1 != null && list2 != null){
            if (list1.val < list2.val){
                cur.next = list1;
                list1 = list1.next;
            }else {
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
        }
        //此时说明有一个链表为空，将不为空的节点拼接
        while (list1 != null){
            cur.next = list1;
            cur = cur.next;
            list1 = list1.next;
        }

        while (list2 != null){
            cur.next = list2;
            cur = cur.next;
            list2 = list2.next;
        }
        //返回虚拟头节点的下一节点
        return dummyHead.next;
    }
}
